﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CROSLAND.BL.BE;
using CROSLAND.DL.DALCF;

namespace CROSLAND.BL.BC
{
    public class ClienteBC
    {
        #region Singleton
        private ClienteBC() { }
        private static ClienteBC _instance = null;
        public static ClienteBC Instance
        {
            get { return (_instance == null) ? _instance = new ClienteBC() : _instance; }
        }
        #endregion

        public List<InterlocutorBE> buscaInterlocutores(string pCodCliente, string pCodOrgVtas, string pCodCanalDist, string pSector)
        {
            return DaoFactory.ClienteDALC.buscaInterlocutores(pCodCliente, pCodOrgVtas, pCodCanalDist, pSector);
        }
        
        /// <summary>
        /// Lee cliente por Código o NIF
        /// </summary>
        /// <param name="pCodigo">Código/NIF</param>
        /// <param name="pUw">Ususario Web</param>
        /// <returns>Objeto Cliente</returns>
        public ClienteBE leer(string pCodigo, UsuarioWebBE pUw)
        {
            ClienteBE retobj = null;
            List<ClienteBE> lst = DaoFactory.ClienteDALC.buscarCliente(pCodigo, "", pUw);
            if (lst.Count > 0) { retobj = lst[0]; }
            return retobj;
        }

        /// <summary>
        /// Valida el RUC dependiento de la Organización de Ventas.
        /// </summary>
        /// <param name="pRuc">RUC del cliente.</param>
        /// <param name="pOrgVtas">Código de Organización de ventas.</param>
        public string validaRUC(string pRuc, string pOrgVtas)
        {
            return DaoFactory.ClienteDALC.validaRUC(pRuc, pOrgVtas);
        }

        /// <summary>
        /// Método que devuelve una lista de clientes de acuerdo a los parametros indicados
        /// </summary>
        /// <param name="pCodigo">Codigo del Cliente</param>
        /// <param name="pNif">Número de Documento</param>
        /// <param name="pNombre">Nombre o Razón Social</param>
        /// <returns></returns>
        public List<ClienteBE> buscarCliente(string pCodigo, string pNombre, UsuarioWebBE uw)
        {
            return DaoFactory.ClienteDALC.buscarCliente(pCodigo, pNombre, uw);
        }

        public List<ClienteBE> buscarEntFin(string pCodigo, string pNombre, UsuarioWebBE uw)
        {
            return DaoFactory.ClienteDALC.buscarEntFin(pCodigo, pNombre, uw);
        }

        /// <summary>
        /// Crea un nuevo cliente
        /// </summary>
        /// <param name="objCli"></param>
        /// <param name="usrWeb"></param>
        /// <param name="codCli"></param>
        /// <returns></returns>
        public string creaCliente(ClienteBE objCli, UsuarioWebBE usrWeb, out string codCli)
        {
            return DaoFactory.ClienteDALC.creaCliente(objCli, usrWeb, out codCli);
        }

        /// <summary>
        /// Modifica el cliente seleccionado
        /// </summary>
        /// <param name="objCli"></param>
        /// <param name="usrWeb"></param>
        public string modificaCliente(ClienteBE objCli, UsuarioWebBE usrWeb)
        {
            return DaoFactory.ClienteDALC.modificaCliente(objCli, usrWeb);
        }

        public List<GenericBE> buscaVendedor(string txtVen, string codVen, string ofVta, DateTime fecha)
        {
            return DaoFactory.ClienteDALC.buscaVendedor(txtVen, codVen, ofVta, fecha);
        }

        public List<ClienteBE.BancoBE> listaBanco(string codCliente, string soc)
        {
            return DaoFactory.ClienteDALC.listaBanco(codCliente, soc);
        }
    }
}
